home *** CD-ROM | disk | FTP | other *** search
/ Plug-In Power Pack for Netscape Communicator / Plug-In Power Pack for Netscape Communicator.iso / plugins / dataviews / dvtools / demos / surfdemo / surfdsp.c < prev    next >
C/C++ Source or Header  |  1997-05-08  |  9KB  |  295 lines

  1. #ifndef lint
  2. static char SccsId[]= "@(#)surfdsp.c    V1.11    3/17/95";
  3. #endif
  4.  
  5. /*------------------------------------------------------------------
  6. | file name -- display.c
  7. |
  8. | functions             Description
  9. | ---------             -----------
  10. | InitDisplay           Initializes the SCREEN and DRAWPORTS
  11. | TermDisplays          Cleans up the SCREEN, DRAWPORTS and DISPLAY_LIST
  12. |
  13. | InitMainDrawport      Initializes the main graph drawport
  14. | InitControlDrawports  Initializes the threshold and color control drawports
  15. |
  16. | DrawDisplays        Draws the display
  17. | DoPlot        Draws just the graph
  18. |
  19. |-----------------------------------------------------------------*/
  20.  
  21. #include "std.h"
  22. #include "dvstd.h"
  23. #include "dvtools.h"
  24. #include "VOstd.h"
  25. #include "surfdata.h"
  26. #include "dvtoolfuns.h"
  27. #include "dvinteract.h"
  28. #include "VOfundecl.h"
  29. #include "VGfundecl.h"
  30. #include "VPfundecl.h"
  31. #include "VUfundecl.h"
  32. #include "GRfundecl.h"
  33. #include "surffundecl.h"
  34.  
  35.  
  36. #define WINDOW_TITLE     " *** DataViews Data Visualization Demo ***"
  37.  
  38. #define MAIN_VIEW     "surfdemo.v"
  39. #define PALETTE_VIEW     "colors.v"
  40. #define THRESH_VIEW    "thresholds.v"
  41.  
  42.  
  43. /***************** Begin Function Declarations *************/
  44. LOCAL  void InitMainDrawport V_P_((void));
  45. /***************** End Function Declarations *************/
  46.  
  47. /*------------------------------------------------------------------
  48. |
  49. | InitDisplay
  50. |    This function opens the screen and creates the main and control
  51. |    drawports.
  52. */
  53. void 
  54. InitDisplay (device)
  55.      char *device;
  56. {
  57.   int error_code;
  58.   char buf[50];
  59.     
  60.   /* Open the main window */
  61.   VUoff_copyright ();
  62.   Screen = TscOpenSet (device, (CHAR *) NULL,
  63.                        V_WINDOW_NAME, WINDOW_TITLE,
  64. #ifdef WINNT
  65.                /*  V_WINDOW_HEIGHT, 600,
  66.                V_WINDOW_WIDTH, 800, */
  67.                V_WIN32_ICON_NAME,   "surficon",
  68. #endif /* WINNT */
  69.                        V_X_EXPOSURE_BLOCK, YES,
  70.                        V_ACTIVE_CURSOR,
  71.                        V_END_OF_LIST);
  72.  
  73.   if(!Screen)
  74.  {
  75.    error_code=TscOpenError();
  76. #ifdef WINNT
  77.    sprintf(buf,"Product is not validated. Error code %d.",error_code);
  78.    MessageBox(NULL,buf,"Validation Error",MB_OK);
  79. #else
  80.    fprintf(stderr,"Product is not validated. Error code %d.",error_code);
  81. #endif
  82.    exit(error_code);
  83.   }
  84.  
  85.   /* If we couldn't open a window, exit the program */
  86.   EXIT_IF_INVALID (Screen, NO_DEVICE);
  87.  
  88.   /* Erase the "copyright" message */
  89.   (VOID) TscErase (Screen);
  90.  
  91.   /* Load in the Main, Threshold and Palette views */
  92.   MainView = TviLoad (MAIN_VIEW);
  93.   EXIT_IF_INVALID (MainView, NO_MAIN_VIEW);
  94.   ThreshView = TviLoad (THRESH_VIEW);
  95.   EXIT_IF_INVALID (ThreshView, NO_THRESH_VIEW);
  96.   PaletteView = TviLoad (PALETTE_VIEW);
  97.   EXIT_IF_INVALID (PaletteView, NO_PALETTE_VIEW);
  98.  
  99.   /* Create Drawports and Initialize global variables */
  100.   InitMainDrawport ();
  101.   InitControlDrawports ();
  102. }
  103.  
  104. /*------------------------------------------------------------------
  105. |
  106. | InitMainDrawport
  107. |    This function creates a drawport for the main graph display
  108. |    and initializes special objects.  The graphs must be extracted
  109. |    and their vdp's rebound.  We also get the objects associated
  110. |    with the color threshold echo box and the formula echo box.
  111. */
  112. LOCAL void InitMainDrawport 
  113. V_P_ ((void))
  114. {
  115.   INT i;
  116.   VARDESC vdp;
  117.  
  118.   /* Create the Drawport */
  119.   MainDrawport = TdpCreate (Screen, MainView,
  120.                             (RECTANGLE *) NULL, (RECTANGLE *) NULL);
  121.   MainDrawing = TviGetDrawing (MainView);
  122.  
  123.   /* Find the graph object and rebind its data */
  124.   GraphObj = TdrGetNamedObject (MainDrawing, "DisplayArea");
  125.   GraphDgp = VOdgGetDgp (GraphObj);
  126.   GraphVdp = GetVdp (GraphObj);
  127.   (VOID) TvdPutBuffer (GraphVdp, (ADDRESS) Formula.data);
  128.  
  129.   /* Find the frame behind the graph */
  130.   FrameObj = TdrGetNamedObject (MainDrawing, "GraphFrame");
  131.  
  132.   /* Find the timining meter graph and rebind its data */
  133.   TimingObj = TdrGetNamedObject (MainDrawing, "TimingArea");
  134.   (VOID) VOobReference (TimingObj);
  135.   TimingDgp = VOdgGetDgp (TimingObj);
  136.   TimingVdp = GetVdp (TimingObj);
  137.   (VOID) TvdPutBuffer (TimingVdp, (ADDRESS) & TimingValue);
  138.  
  139.   /* Delete meter graph since it isn't part of the initial display */
  140.   (VOID) VOdrObDelete (MainDrawing, TimingObj);
  141.  
  142.   /* Get the threshold table and set the initial threshold value */
  143.   VGvdctt (GraphVdp, &ThreshTableSize, &ThreshTable);
  144.   for (i = 0; i < 3; i++)
  145.     ThreshValue[i] = Formula.zmin +
  146.       (ThreshTable[i].upperlimit / (FLOAT) 32768) *
  147.       (Formula.zmax - Formula.zmin);
  148.   ThreshEchoArea = TdrGetNamedObject (MainDrawing, "ThresholdBox");
  149.  
  150.   /* Find the FormulaArea */
  151.   FormulaArea = TdrGetNamedObject (MainDrawing, "FormulaArea");
  152.  
  153.   /* Find the Message/Formula Text Object */
  154.   MessageObj = TdrGetNamedObject (MainDrawing, "FormulaText");
  155.   vdp = GetVdp (MessageObj);
  156.   (VOID) TvdPutBuffer (vdp, (ADDRESS) MessageBuf);
  157.  
  158. }
  159.  
  160. /*------------------------------------------------------------------
  161. |
  162. | InitControlDrawports
  163. |    This function creates drawports for the color and threshold
  164. |    controls.  The drawports are created so they fit inside the
  165. |    graph.  The drawports won't be drawn until the user requests
  166. |    the controls.  This function is also called after the user
  167. |    resizes the window.  The drawports must be recreated since the
  168. |    position of the graph has changed.
  169. */
  170. void InitControlDrawports 
  171. V_P_ ((void))
  172. {
  173.   OBJECT area_obj;
  174.   RECTANGLE where_vp, what_vp, dummy;
  175.  
  176.   /* Setup the Threshold and Control Areas */
  177.   area_obj = TdrGetNamedObject (MainDrawing, "DisplayArea");
  178.   VOobBox (area_obj, &where_vp, &dummy);
  179.   (VOID) TdpWorldToScreen (MainDrawport, &where_vp.ll, &where_vp.ll);
  180.   (VOID) TdpWorldToScreen (MainDrawport, &where_vp.ur, &where_vp.ur);
  181.   (VOID) GRscs_to_vcs (&where_vp.ll, &where_vp.ll);
  182.   (VOID) GRscs_to_vcs (&where_vp.ur, &where_vp.ur);
  183.  
  184.   /* Setup the Threshold Control Drawport */
  185.   ThreshDrawing = TviGetDrawing (ThreshView);
  186.   VOobBox (ThreshDrawing, &what_vp, &dummy);
  187.   if (ThreshDrawport)
  188.     (VOID) TdpResize (ThreshDrawport, &where_vp);
  189.   else
  190.     ThreshDrawport = TdpCreateStretch (Screen, ThreshView,
  191.                                        &where_vp, &what_vp);
  192.  
  193.   /* Setup the Color Control Drawport */
  194.   PaletteDrawing = TviGetDrawing (PaletteView);
  195.   VOobBox (PaletteDrawing, &what_vp, &dummy);
  196.   if (PaletteDrawport)
  197.     (VOID) TdpResize (PaletteDrawport, &where_vp);
  198.   else
  199.     PaletteDrawport = TdpCreateStretch (Screen, PaletteView,
  200.                                         &where_vp, &what_vp);
  201.  
  202. }
  203.  
  204. /*------------------------------------------------------------------
  205. |
  206. | DrawDisplay
  207. |    This function draws the main drawport.  If its the first time
  208. |    the drawport is drawn, the initialization message is displayed.
  209. */
  210. void 
  211. DrawDisplay (first_time_flag)
  212.      BOOLPARAM first_time_flag;
  213. {
  214.   if (first_time_flag == FIRST_TIME)
  215.     {
  216.       SetMessage ("Surfdemo -- V.I. Corporation");
  217.       (VOID) TdpDraw (MainDrawport);
  218.       DrawThreshRect (ThreshEchoArea);
  219.       PrintMessage (FormulaMenu[0], YES);
  220.     }
  221.   else
  222.     {
  223.       (VOID) TscRedraw (Screen, (RECTANGLE *) NULL);
  224.       DrawThreshRect (ThreshEchoArea);
  225.     }
  226. }
  227.  
  228. /*------------------------------------------------------------------
  229. |
  230. | DoPlot
  231. |    This function draws the graph if needed.  If new data is being
  232. |    generated, the timing meter is displayed.  After the data is
  233. |    calculated, the graph is displayed.
  234. */
  235. void DoPlot 
  236. V_P_ ((void))
  237. {
  238.   /* Do data checking */
  239.   if (CheckPlotData ())
  240.     {
  241.  
  242.       /* Erase the current plot */
  243.       (VOID) TdpEraseObject (MainDrawport, FrameObj);
  244.       (VOID) TdpEraseObject (MainDrawport, GraphObj);
  245.  
  246.       /* See if we need to get new data */
  247.       if (NeedToGenData ())
  248.         {
  249.           /* Set up the timing meter */
  250.           if (Plot.xdivisions * Plot.ydivisions != 1)
  251.             VPvd_irange (TimingVdp, 1, (INT) (Plot.xdivisions * Plot.ydivisions));
  252.           else
  253.             VPvd_irange (TimingVdp, 1, 2);
  254.           (VOID) VOdrObAdd (TviGetDrawing (MainView), TimingObj);
  255.           TimingValue = 1.0;
  256.           (VOID) TdpDrawObject (MainDrawport, TimingObj);
  257.  
  258.           /* Generate data, get rid of timing meter, and do new plot */
  259.           GenerateData (0);
  260.           (VOID) TdpEraseObject (MainDrawport, TimingObj);
  261.           (VOID) VOdrObDelete (TviGetDrawing (MainView), TimingObj);
  262.         }
  263.  
  264.       /* Draw the graph */
  265.       (VOID) TdpDrawObject (MainDrawport, FrameObj);
  266.       (VOID) TdpDrawObject (MainDrawport, GraphObj);
  267.     }
  268. }
  269.  
  270. /*------------------------------------------------------------------
  271. |
  272. | TermDisplays
  273. |    This function cleans up the views, drawports and closes the
  274. |    screen.
  275. */
  276. void TermDisplays 
  277. V_P_ ((void))
  278. {
  279.  
  280.   /* Cleanup the Drawports and Views */
  281.   (VOID) TdpDestroy (MainDrawport);
  282.   (VOID) TviDestroy (MainView);
  283.  
  284.   (VOID) TdpDestroy (ThreshDrawport);
  285.   (VOID) TviDestroy (ThreshView);
  286.  
  287.   (VOID) TdpDestroy (PaletteDrawport);
  288.   (VOID) TviDestroy (PaletteView);
  289.  
  290.  
  291.   /* Cleanup the window */
  292.   (VOID) TscErase (Screen);
  293.   (VOID) TscClose (Screen);
  294. }
  295.